#!/usr/bin/python
# -*- coding: utf-8 -*- 
import urllib,re
fast = False    # Режим быстрой загрузки (закачка только первой страницы списка прошедших игр) 

def str2date(date_str):
    date_map = {u'января':1,u'февраля':2,u'марта':3,u'апреля':4,u'мая':5,u'июня':6,u'июля':7,u'августа':8,u'сентября':9,u'октября':10,u'ноября':11,u'декабря':12,
                'January':1, 'February':2,'March':3,'April':4,'May':5,'June':6,'July':7,'August':8,'September':9,'October':10,'November':11,'December':12,
                "sausio":1,"vasario":2,"kovo":3,u"balandžio":4,u"gegužės":5,u"birželio":6,u"liepos":7,u"rugpjūčio":8,u"rugsėjo":9,"spalio":10,u"lapkričio":11,u"gruodžio":12,
                "ledna":1, u"února":2, u"března":3, "dubna":4, u"května":5, u"června":6, u"července":7, u"srpna":8, u"září":9, u'\u0159\xedjna':10, "listopadu":11, "prosince":12,
                u'janvier':1, u'février':2, u'mars':3, u'avril':4, u'mai':5, u'juin':6, u'juillet':7, u'août':8, u'septembre':9, u'octobre':10, u'novembre':11, u'décembre':12,
                u'\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8':1,u'\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8':2,u'\u10db\u10d0\u10e0\u10e2\u10d8':3,u'\u10d0\u10de\u10e0\u10d8\u10da\u10d8':4,u'\u10db\u10d0\u10d8\u10e1\u10d8':5,u'\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8':6,u'\u10d8\u10d5\u10da\u10d8\u10e1\u10d8':7,u'\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8':9,u'\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8':10,u'\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8':11, u'\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8':12}
    pieces = date_str.split(' ')
    try:
        day, month,year = int(pieces[0]), date_map[pieces[1]],int(pieces[2])
        return "%d-%d-%d" % (year,month,day)
    except:
        #print 'Urecognized month: ', unicode(date_str.decode('utf-8')) #.encode('utf-8')
        return None

def getCountriesList():
    url = "http://en.cx/?lang=ru"
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    countryList = re.findall(r'Geography_CountryRepeater_ctl(\d+)_lblCountry\" class=.*?\">(.*?)</span>.*?cid=(\d+)', pageContent, re.MULTILINE | re.DOTALL)
    #print "Countries count: ",len(countryList),"\n"
    #print "\n".join(["%s - %s" % (countryName, countryId) for v, countryName, countryId in countryList] )
    return countryList

def getDomainsList(countryId, regionId):
    # /ALoader/Geography.aspx?mode=georeport&c=100030
    url = "http://en.cx/ALoader/Geography.aspx?lang=ru&mode=georeport&c=%s&r=%s" % (countryId,regionId)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.readlines()
    domainList = []
    for line in pageContent:
        fields = line.split(";\t")
        #print fields
        if len(fields) == 10:
            fields[9] = fields[9].rstrip()
            del fields[6]
            del fields[0]
            domainList.append(fields)
    return domainList

def getRegions(countryId):
    url = "http://en.cx/ALoader/Geography.aspx?lang=ru&mode=georeport&c=%s" % countryId
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.readlines()
    regionsDomains = []
    mode = 'r'
    for line in pageContent:
        fields = line.split(";\t")
        fieldsCount = len(fields)
        if fieldsCount == 7:    # Если прилетел список регионов
            fields[6] = fields[6].rstrip()
            del fields[0]   # Удаляем первый элемент, равный букве 'r'
            regionsDomains.append(fields)
        elif fieldsCount == 10:    # Если прилетел список доменов
            fields[9] = fields[9].rstrip()
            del fields[6]
            del fields[0]
            regionsDomains.append(fields)
            mode = 'd'

    return (mode, regionsDomains)

def _getGamesList(pageContent):
#    print pageContent
    pattern = r'<span id="ctl\d+_lblPageName" class="PageTitle">(.+)<div id="DivRightDesign">'
    pattern = r'<h1 class="PageTitle">(.+)<span class="yellow_green11">'
    gamesBlock = re.findall(pattern, pageContent, re.MULTILINE | re.DOTALL)
#    print gamesBlock
    if len(gamesBlock) == 0:
        return None
    # Распарсим блоки на небольшие кусочки - по одному на описание игры
    gamesPieces = re.findall(r'ImgGameType(.*?)gameInfo_lnkGameDetails', gamesBlock[0], re.MULTILINE | re.DOTALL)
    #print 'pieces:',len(gamesPieces)
    games = []
    for item in gamesPieces:
        #  Выделяем ИД и Название игры <a class="yellow_darkgreen19" ID="lnkGameTitle" href="/GameDetails.aspx?gid=10583">D.S. Pavor nocturnus</a>
        res = re.findall(r'<a.*? ID="lnkGameTitle" href="\/GameDetails\.aspx\?gid=(\d+)".*?>(.*?)<\/a>', item, re.MULTILINE | re.DOTALL)
        #print 'ID & NAME: ',res
        (gameID,gameName) = res[0]
        # Выделяем Номер, тип и вид игры GamesRepeater_ctl06_gameInfo_GameHeader_lblGameNum
        res = re.findall(r'<span.*?gameInfo_GameHeader_lblGameNum\">(-?\d+)<\/span>', item, re.MULTILINE)
        gameNumber = int(res[0]) # Порядковый номер игры в домене
        res = re.findall(r'ltrGameZoneVal.*?>(.+)<\/span>', item, re.MULTILINE)
        gameZone = res[0]
        res = re.findall(r'ltrGameTypeVal.*?>(.+)<\/span>', item, re.MULTILINE)
        gameType = res[0]
        res = re.findall(r'ltrGameStartDateTime.*?>(.+)<\/span>', item, re.MULTILINE)
        gameDateStr = res[0]
        gameDate = str2date(gameDateStr.decode('utf8')) # Дата переведенная из человеческого строкового вида в машинный (Y-m-d)
        di = {'gameID':gameID, 'gameNumber':gameNumber, 'gameName':gameName, 'gameZone':gameZone, 'gameType':gameType,'gameDate':gameDate, 'gameDateStr':gameDateStr}
        games.append(di)
        #print di
    return games

#Возвращает количество страниц с ссылками на игры
def getGames(domain):
    url = "http://%s/Games.aspx?lang=ru" % (domain,)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    
    # Образец исходника страницы со списком страниц:
    # <div style="width:100%" align="center">1&nbsp;&nbsp;<a href="/Games.aspx?page=2">2</a>&nbsp;&nbsp;<a href="/Games.aspx?page=3">3</a>&nbsp;&nbsp;<a href="/Games.aspx?page=4">4</a>&nbsp;&nbsp;<a href="/Games.aspx?page=5">5</a>&nbsp;&nbsp;<a href="/Games.aspx?page=6">6</a><br/><br/></div>
    gameList = _getGamesList(pageContent)
    
    # <a href="/Games.aspx?page=2">2</a>
    pageList = re.findall(r'<a href="\/Games\.aspx\?page=(\d+)">', pageContent, re.MULTILINE | re.DOTALL)
    
    if fast ==False and len(pageList) > 0:      # Если страниц более одной, и БыстрыйРежим выключен
        #pageList[:0] = [1];
        pageList = [int(pn) for pn in pageList] # Преобразуем строковые значения номеров страниц в числовые (для поиска максимума)
        maxPageNumber = max(pageList)
        
        for i in xrange(2,maxPageNumber+1):
            url = "http://%s/Games.aspx?lang=ru&page=%d" % (domain,i)
            pageContent = urllib.urlopen(url).read()
            gameList = gameList + _getGamesList(pageContent) 
    
    return gameList

def getScenarioSource(domain, gameId):
    url = "http://%s/GameScenario.aspx?gid=%s" % (domain,gameId)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    return pageContent